package com.hh.m15e.exception;

import lombok.Getter;

/**
 * Http状态返回枚举
 **/
@Getter
public enum HttpStatusEnum {
    /**
     * 操作成功
     */
    SUCCESS(200, "操作成功"),
    /**
     * 对象创建成功
     */
    CREATED(201, "对象创建成功"),
    /**
     * 请求已经被接受
     */
    ACCEPTED(202, "请求已经被接受"),
    /**
     * 操作已经执行成功，但是没有返回数据
     */
    NO_CONTENT(204, "操作已经执行成功，但是没有返回数据"),
    /**
     * 资源已被移除
     */
    MOVED_PERM(301, "资源已被移除"),
    /**
     * 重定向
     */
    SEE_OTHER(303, "重定向"),
    /**
     * 资源没有被修改
     */
    NOT_MODIFIED(304, "资源没有被修改"),
    /**
     * 参数列表错误（缺少，格式不匹配）
     */
    BAD_REQUEST(400, "参数列表错误（缺少，格式不匹配）"),
    /**
     * 未授权
     */
    UNAUTHORIZED(401, "未授权"),

    /**
     * 令牌验证失败
     */
    TOKEN_VERIFY_ERROR(402, "令牌验证失败"),

    /**
     * 登录状态已过期
     */
    TOKEN_EXPIRED(402, "登录状态已过期"),

    /**
     * 令牌已过期或验证不正确
     */
    TOKEN_INVALID(402, "令牌已过期或验证不正确"),

    /**
     * 令牌格式不正确
     */
    TOKEN_FORMAT_ERROR(402, "令牌格式不正确"),

    /**
     * 令牌不能为空
     */
    TOKEN_IS_NULL(402, "令牌不能为空"),


    /**
     * 访问受限，授权过期
     */
    FORBIDDEN(403, "访问受限，授权过期"),
    /**
     * 资源，服务未找到
     */
    NOT_FOUND(404, "资源，服务未找到！"),
    /**
     * 不允许的http方法
     */
    BAD_METHOD(405, "不允许的http方法"),
    /**
     * 资源冲突，或者资源被锁
     */
    CONFLICT(409, "资源冲突，或者资源被锁"),
    /**
     * 不支持的数据，媒体类型
     */
    UNSUPPORTED_TYPE(415, "不支持的数据，媒体类型"),
    /**
     * 系统内部错误
     */
    ERROR(500, "系统内部错误"),
    /**
     * 接口未实现
     */
    NOT_IMPLEMENTED(501, "接口未实现"),
    /**
     * 系统警告消息
     */
    WARN(601, "系统警告消息"),

    // 自定义异常枚举

    /**
     * 没有访问权限，请联系管理员授权
     */
    AUTH_ERROR(403, "没有访问权限，请联系管理员授权"),


    /**
     * 登陆失败
     */
    USER_LOGIN_ERROR(40001, "登录失败"),
    /**
     * 登录用户不存在
     */
    USER_NOT_FOUND(40001, "登录用户：{0} 不存在"),
    /**
     * 用户/密码错误
     */
    USER_PASSWORD_ERROR(40001, "用户/密码错误"),
    /**
     * 用户/密码必须填写
     */
    USER_PASSWORD_NOT_NULL(40001, "用户/密码必须填写"),
    /**
     * 用户密码不在指定范围
     */
    USER_PASSWORD_RANGE_ERROR(40001, "用户密码不在指定范围"),
    /**
     * 用户名不在指定范围
     */
    USER_NAME_RANGE_ERROR(40001, "用户名不在指定范围"),
    /**
     * 很遗憾，访问IP已被列入系统黑名单
     */
    USER_IP_BLACK_LIST(40001, "很遗憾，访问IP已被列入系统黑名单"),
    /**
     * 对不起，您的账号已被删除
     */
    USER_DELETE(40001, "对不起，您的账号：{0} 已被删除"),
    /**
     * 用户已停用，请联系管理员
     */
    USER_STOP(40001, "对不起，您的账号：{0} 已停用"),

    /**
     * 日志保存失败
     */
    LOG_SAVE_ERROR(40001, "日志保存失败"),

    /**
     * 未与服务器建立连接
     */
    CONNECTION_ERROR(40001, "未与服务器建立连接"),

    /**
     * 查询结果为空
     */
    QUERY_NULL(40002, "查询结果为空"),

    /**
     * 参数错误
     */
    QUERY_PARAM_ERROR(40003, "参数错误"),

    /**
     * 当前页数为空
     */
    QUERY_PAGE_NUMBER_ERROR(40003, "当前页数为空"),

    /**
     * 页面长度为空
     */
    QUERY_PAGE_SIZE_ERROR(40003, "页面长度为空"),

    /**
     * 参数不能小于零
     */
    QUERY_PAGE_SIZE_LENGTH_ERROR(40003, "参数不能小于零"),

    /**
     * 页面长度不能大于{0}
     */
    QUERY_PAGE_SIZE_LENGTH_MAX_ERROR(40003, "页面长度不能大于{0}"),

    /**
     * 添加失败
     */
    ADD_ERROR(40004, "添加失败"),

    /**
     * 删除失败
     */
    DELETE_ERROR(40005, "删除失败"),

    /**
     * 更新失败
     */
    UPDATE_ERROR(40006, "更新失败"),

    /**
     * 格式校验失败
     */
    CHECK_FAILURE(40007, "格式校验失败"),

    /**
     * 必填参数为空
     */
    REQUIRED_IS_NULL(40008, "必填参数为空"),


    /**
     * 菜单类型错误
     */
    MENU_NOT_TYPE(40010, "菜单类型错误"),

    /**
     * check_parent修改失败返回提示
     */
    CHECK_PARENT_UPDATE_ERROR(40011, "校验表中有正在使用 {0} 编码,不能修改校验表编码"),

    /**
     * check_parent删除失败返回提示
     */
    CHECK_PARENT_DELETE_ERROR(40012, "校验表中有正在使用 {0} 编码,不能删除该条校验表数据"),

    /**
     * check添加失败父表中没有对应的编码
     */
    CHECK_SAVE_FUN_ID_ERROR(40013, "添加失败，校验父表中没有 {0} 编码"),

    /**
     * check添加失败，表中有表名已经存在
     */
    CHECK_SAVE_FUN_NAME_ERROR(40014, "添加失败，该表中已有 {0} 名称"),

    /**
     * check修改失败提示
     */
    CHECK_UPDATE_ERROR(40015, "修改失败，表id {0} 中表字段名称 {1} 已有在使用"),

    /**
     * dict表中没有维护好
     */
    DICT_TABLE_NULL(40016, "该表名错误,未查到相关信息或字典mapper里的方法名未维护"),

    /**
     * dict表中维护的mapper里的方法名错误
     */
    DICT_TABLE_ERROR(40016,"表中维护的mapper里的方法名错误,程序中找不到该方法"),

    /**
     * 用户名已存在
     */
    USER_IS_EMPTY(40017, "用户名已存在"),

    /**
     * 没有获取到当前人的信息
     */
    TOKEN_ERROR(40018, "token错误，未获取到当前人信息"),

    /**
     * 导入有误
     */
    IMPORT_ERROR(40019, "导入有错误"),

    /**
     * 菜单目录id已满
     */
    MENU_ID_FULL(40020, "菜单目录id已经满了，请联系管理员"),

    /**
     * 菜单表id生成重复
     */
    MENU_ID_CREATE_ERROR(40021, "id生成重复"),

    /**
     * 菜单父id和菜单类型不符
     */
    MENU_PARENT_ID_TYPE_ERROR(40022, "菜单父id和菜单类型不符合"),

    /**
     * 此父类id不存在
     */
    MENU_PARENT_ID_IS_NULL(40023, "此父类id不存在"),

    /**
     * 父类id不能为空
     */
    API_PARENT_ID_IS_NULL(40023, "父类id不能为空"),

    /**
     * 父类id不存在
     */
    API_PARENT_ID_IS_EMPTY(40023, "父类id不存在"),

    /**
     * 菜单名称或权限重复
     */
    MENU_NAME_PERMISSION_IS_REPEAT(40024, "菜单表中名称或权限重复"),

    /**
     * 目录或菜单icon或path必须填写
     */
    MENU_ICON_PATH_IS_ERROR(40025, "目录或菜单icon或path必须填写"),

    /**
     * 按钮类型，权限功能必填
     */
    MENU_PERMISSION_IS_ERROR(40026, "按钮类型，权限功能必填"),

    /**
     * 接口编码不能为空
     */
    API_NUM_IS_NULL(40027,"接口编码不能为空"),

    /**
     * 接口类型不能为空
     */
    API_TYPE_IS_NULL(40027,"接口类型不能为空"),

    /**
     * 接口权限标识不能为空
     */
    API_PERMISSION_IS_NULL(40027,"接口权限标识不能为空"),

    /**
     * 此接口地址已经存在
     */
    API_NUM_TYPE_IS_EMPTY(40028,"此接口编码和类型已经存在"),

    /**
     * 权限标识已经存在
     */
    API_PERMISSION_IS_EMPTY(40029,"权限标识已经存在"),

    /**
     * 厂商账户已存在
     */
    VENDOR_APPID_IS_EMPTY(40030,"厂商名称已存在"),

    /**
     * 分组类型不存在
     */
    GROUP_TYPE(40031,"分组类型不存在"),

    /**
     * 删除的东西不存在
     */
    DELETE_IS_NULL(40032,"删除的东西不存在"),

    /**
     * 还原失败
     */
    REDUCTION_ERROR(40032,"还原失败"),

    /**
     * 目录不存在
     */
    CATALOG_IS_NULL(40032,"目录不存在"),

    /**
     * 下载文件不存在
     */
    DOWNLOAD_FILE_IS_NULL(40032,"下载文件不存在"),

    /**
     * 下载失败
     */
    DOWNLOAD_ERROR(40032,"下载失败"),

    /**
     * 不是你的文件不能移动
     */
    MOVE_FILE_IS_NULL(40032,"不是你的文件不能移动"),

    /**
     * 移动的目标目录不存在
     */
    MOVE_CATALOG_IS_NULL(40032,"移动的目标目录不存在"),

    /**
     * 移动失败
     */
    MOVE_ERROR(40032,"移动失败"),

    /**
     * 粘贴的文件不存在
     */
    PASTE_FILE_IS_NULL(40032,"粘贴的文件不存在"),

    /**
     * 个人文档和共享文档不能全部粘贴
     */
    PASTE_FILE_IS_NULL_ERROR(40032,"个人文档和共享文档不能全部粘贴"),

    /**
     * 文件不能为空
     */
    FILE_IS_NULL(40032,"文件不能为空"),

    /**
     * 文件上传失败
     */
    FILE_UPLOAD_ERROR(40033,"文件上传失败"),

    /**
     * B3表中文件的名称不存在
     */
    FILE_NAME_IS_NULL(40034,"文件名称不存在"),

    /**
     * 文件名已经存在
     */
    FILE_NAME_IS_EXIST(40034,"文件名已经存在"),

    /**
     * 不存在你所要更新的数据
     */
    NOT_EXIST_DATA(40035,"不存在你所要更新的数据"),

    /**
     * 该接口下有子类，不能删除
     */
    API_CHILD_IS_NOT_NULL(40036, "该接口下有子类，不能删除"),

    /**
     * 该菜单下有子类，不能删除
     */
    MENU_CHILD_IS_NOT_NULL(40037, "该菜单下有子类，不能删除"),

    /**
     * 体温单有错误，请检查
     */
    TEMPERATURE_ERROR(40038, "体温单有错误，请检查");


    private final Integer code;
    @Getter
    private final String message;

    HttpStatusEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    // 新增方法：根据传入的参数替换消息中的占位符
    public String getMessage(Object... args) {
        if (args == null || args.length == 0) {
            return message; // 如果没有参数，则直接返回原始消息
        }
        return String.format(message, args); // 使用 String.format 替换占位符
    }

}